home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir42 / ja94ex.zip / SEARCH.CMD < prev    next >
OS/2 REXX Batch file  |  1994-07-19  |  4KB  |  186 lines

  1. *(SEARCH.CMD - Search and replace program)
  2.  
  3. CLS
  4. CLEAR ALL VAR
  5. SET ERROR VAR VsEvar
  6. SET MESSAGES OFF
  7. SET ERROR MESSAGES OFF
  8. CLS
  9. LABEL toploop
  10.  
  11. CLS FROM 3,42 TO 7,78 BLACK
  12. CLS FROM 2,40 TO 6,77 CYAN
  13. WRITE ' RB:Search' AT 3,52 YELLOW ON CYAN
  14. WRITE ' Text Search and Replace Program.' +
  15.   AT 5,42 YELLOW ON CYAN
  16.  
  17. CHOOSE VsTblview FROM #TBLVIEWS AT 5 12
  18. IF VsEvar <> 0 THEN
  19.   PAUSE 2 USING 'No tables or views available.'
  20.   GOTO alldone
  21. ENDIF
  22. IF VsTblview = '[Esc]' THEN
  23.   GOTO alldone
  24. ENDIF
  25.  
  26.  
  27. SET VAR VsTabid = sys_table_id FROM sys_tables +
  28.   WHERE sys_table_name = .VsTblview
  29.  
  30.  
  31. SELECT COUNT(*) INTO VsEdiCols FROM sys_columns +
  32.   WHERE sys_table_id = .VsTabid AND +
  33.   (sys_data_type = 3 OR sys_data_type = 8)
  34.  
  35. IF VsEdiCols = 0 THEN
  36.   PAUSE 2 USING +
  37.    'This table has no Text or Note columns to modify.' +
  38.    AT CENTER,CENTER DEFAULT
  39.   GOTO toploop
  40. ENDIF
  41.  
  42.  
  43. CHOOSE VsColumn FROM #VALUES FOR sys_column_name +
  44.   FROM sys_columns WHERE sys_table_id = .VsTabid AND +
  45.   (sys_data_type = 3 OR sys_data_type = 8) CASCADE
  46. IF VsColumn = '[Esc]' THEN
  47.   GOTO toploop
  48. ENDIF
  49.  
  50. SET VAR VsColLen INT = sys_length FROM sys_columns +
  51.   WHERE sys_column_name = .VsColumn
  52. IF VsColLen > 40 THEN
  53.   SET VAR VsColLen = 40
  54. ENDIF
  55.  
  56. CLS FROM 10 12 TO 18 72 BLACK
  57. CLS FROM  9 10 TO 17 71 GREEN
  58.  
  59. SET VAR VsOldString TEXT, VsNewString TEXT
  60. WRITE 'Enter the old text string to search for.' +
  61.   AT 10 14 BLACK ON GREEN
  62. FILLIN VsOldString = .VsColLen AT 11 14 YELLOW ON GREEN
  63. IF VsOldString IS NULL THEN
  64.   GOTO toploop
  65. ENDIF
  66.  
  67. WRITE 'Enter the new replacement string.' +
  68.   AT 12 14 BLACK ON GREEN
  69. FILLIN VsNewString = .VsColLen AT 13 14 YELLOW ON GREEN
  70. IF VsNewString IS NULL THEN
  71.   GOTO toploop
  72. ENDIF
  73.  
  74. SNAP search.$$$ FROM 1,1 TO 25,80
  75.  
  76. SELECT COUNT(*) INTO VsNumRows FROM &VsTblview +
  77.   WHERE &VsColumn CONTAINS .VsOldString
  78. IF VsNumRows = 0 THEN
  79.   PAUSE 2 USING 'No matching rows found.' +
  80.    AT CENTER,CENTER DEFAULT
  81.   GOTO toploop
  82. ENDIF
  83.  
  84. WRITE 'ALL rows containing the old string +
  85. will be replaced.' AT 15 14 RED ON GREEN
  86. WRITE .VsNumRows, 'rows will be updated.' +
  87.   AT 16 24 RED ON GREEN 
  88.  
  89. DIALOG 'Confirm each change?' +
  90.   VsConfirm, VsKey YES AT 19
  91.  
  92. IF VsConfirm = 'NO' THEN
  93.   DIALOG 'Continue with update of all rows?' +
  94.     VsOk VsEnd YES AT 19
  95.   IF VsOk = 'NO' THEN
  96.     GOTO alldone
  97.   ELSE
  98.  
  99.     SET VAR VsUpdate = +
  100.     ('UPDATE' & .VsTblview & 'SET' & .VsColumn + +
  101.      '=' + '(SRPL(' + .VsColumn + ',' + '''' + +
  102.      .VsOldString + '''' + ',' + '''' + .VsNewString + +
  103.       '''' + ',0))' & 'WHERE' & .VsColumn & + 'LIKE' & +
  104.       '''%' + .VsOldString + '%''')
  105.  
  106.     &VsUpdate
  107.  
  108.     CLS FROM 15 12 TO 17 68 GREEN
  109.     IF VsEvar = 0 THEN
  110.       WRITE 'Update successful,' .VsNumRows, +
  111.         'rows updated.' AT 16 14 RED ON GREEN 
  112.       PAUSE 2
  113.     ELSE 
  114.       WRITE 'Update did not complete.' +
  115.         AT 16 14 RED ON GREEN
  116.       PAUSE 2
  117.     ENDIF
  118.   ENDIF
  119.  
  120. ELSE
  121.  
  122.   SET VAR VsErrCnt INT = 0, VsUpdCnt INT = 0, +
  123.           VsOld TEXT, VsNew TEXT
  124.  
  125.   SET VAR VsWhereString = ('%'+.VsOldString+'%')
  126.  
  127.   DROP CURSOR c1
  128.  
  129.   DECLARE c1 CURSOR FOR SELECT &VsColumn +
  130.    FROM &VsTblview +
  131.    WHERE &VsColumn LIKE .VsWhereString
  132.  
  133.   OPEN c1
  134.   FETCH c1 INTO VsOld VsInd1
  135.   WHILE SQLCODE <> 100 THEN
  136.  
  137.     SET VAR VsNew = +
  138.       (SRPL(.VsOld,.VsOldString,.VsNewString,0))
  139.     CLS FROM 16 9 TO 19 73 BLACK
  140.     CLS FROM 15 8 TO 18 72 CYAN
  141.     WRITE 'Old row value: ', .VsOld AT 16 10 +
  142.       BLACK ON CYAN
  143.     WRITE 'New row value: ', .VsNew AT 17 10 +
  144.       RED ON CYAN
  145.     DIALOG 'Change this row?' VsOk VsEnd YES AT 19 
  146.  
  147.     IF VsOk = 'yes' THEN
  148.  
  149.       UPDATE &VsTblview SET &VsColumn = .VsNew +
  150.         WHERE CURRENT OF c1
  151.  
  152.       IF VsEvar <> 0 THEN
  153.         SET VAR VsErrCnt = -1
  154.       ELSE
  155.         SET VAR VsUpdCnt = (.VsUpdCnt + 1)
  156.       ENDIF
  157.  
  158.     ENDIF
  159.     FETCH c1 INTO VsOld VsInd1
  160.   ENDWHILE
  161.   DROP CURSOR c1
  162.   DISPLAY search.$$$ AT 1
  163.   IF VsErrCnt >= 0 THEN
  164.     SET VAR VsMsg = +
  165.      ( 'Update successful,' & CTXT(.VsUpdCnt) & +
  166.       'rows updated.' )
  167.     PAUSE 2 USING .VsMsg AT 16 DEFAULT
  168.   ELSE
  169.     PAUSE 2 USING 'Update did not complete.' +
  170.       AT 16 DEFAULT
  171.   ENDIF
  172. ENDIF
  173. CLS
  174. *(reset)
  175. LABEL alldone
  176.  
  177. CLEAR VAR Vs%
  178.  
  179. SET ERROR VAR OFF
  180. CLS
  181. SET MESSAGES ON
  182. SET ERROR MESSAGES ON
  183. RETURN
  184.  
  185.  
  186.